package com.winsdom.mapper.customer;

import com.winsdom.entity.customer.CustomerPersonalCreateRequest;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

/**
 * 个人客户创建相关的数据访问接口，提供个人客户信息创建过程中涉及的各类数据操作。
 * 该接口包含了插入个人客户基本信息、扩展信息、证件图片、联系人信息等相关方法。
 */
@Repository
public interface CustomerPersonalCreateMapper {
    /**
     * 插入客户主表信息
     * @param request 个人客户创建请求对象，包含客户基本信息
     */
    void insertCustomerMain(CustomerPersonalCreateRequest request);

    /**
     * 插入个人客户扩展表信息
     * @param customerId 客户ID，关联客户主表
     * @param request 个人客户创建请求对象，包含个人扩展信息
     */
    void insertPersonalInfo(@Param("customerId") Long customerId,
                            @Param("request") CustomerPersonalCreateRequest request);

    /**
     * 插入客户证件图片信息
     * @param customerId 客户ID
     * @param idImagePath 证件图片存储路径
     */
    void insertIdImage(@Param("customerId") Long customerId,
                       @Param("idImagePath") String idImagePath);

    /**
     * 插入客户联系人信息
     * @param customerId 客户ID
     * @param contact 联系人信息对象，包含联系人详细信息
     */
    void insertContact(@Param("customerId") Long customerId,
                       @Param("contact") CustomerPersonalCreateRequest.ContactInfo contact);

    /**
     * 插入联系人与楼盘分类的关联关系
     * @param contactId 联系人ID
     * @param categoryId 楼盘分类ID
     */
    void insertContactProperty(@Param("contactId") Long contactId,
                               @Param("categoryId") Long categoryId);

    /**
     * 根据楼盘分类名称查询对应的分类ID
     * @param propertyName 楼盘分类名称
     * @return 对应的楼盘分类ID，如果不存在则返回null
     */
    Long selectCategoryIdByName(String propertyName);
}